package Guigu11.Overwrite;

/*
 * 方法的重写(Override / Overwrite)
 * 
 * 1.重写：子类继承父类以后，可以对父类中同名同参数的方法，进行操作。
 * 
 * 2.应用：重写以后，当创建子类对象以后，通过子类对象调用子父类中的同名同参数的方法时，实际执行的是子类重写父类的方法。
 * 
 * 3.重写的规定：
 *           方法的声明：权限修饰符  返回值类型  方法名（形参列表）{
 *                     //方法体
 *           }
 *           约定俗成：子类中的方法叫重写的方法，父类中的方法叫被重写的方法
 *        ① 子类重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同。
 *        ② 子类重写的方法的权限修饰符要大于或等于父类被重写的方法的权限修饰符。
 *             >特殊情况：子类不能重写父类中声明为private权限修饰的方法
 *        ③ 返回值类型：
 *             >父类被重写的方法的返回值类型是void，则子类重写的方法的返回值类型只能是void
 *             >父类被重写的方法的返回值类型是A类型，则子类重写的方法的返回值类型可以是A类或A类的子类
 *             >父类被重写的方法的返回值类型是基本数据类型，则子类重写的方法的返回值类型必须是相同的
 *        ④ 子类重写的方法抛出的异常类型要小于或等于父类被重写的方法抛出的异常类型（具体放到异常处理再将）
 *   **********************************************************************************
 *        子类和父类中被重写的同名同参的方法要么都声明为非static的（考虑重写），要么都声明为static的（不能重写）。
 * 
 * 
 * 面试题：区分方法的重载与重写
 */
public class OverwriteTest {

	public static void main(String[] args) {
		Studen s = new Studen();
		s.major = "计算机科学与技术";
		s.eat();
		s.walk(10);
		s.study();
		
		Human h = new Human();
		h.eat();
	}

}
